package com.qf.shopping.servlet.backController;

import com.alibaba.fastjson.JSON;
import com.qf.shopping.common.Constants;
import com.qf.shopping.common.DisatpcherServlet;
import com.qf.shopping.entity.Page;
import com.qf.shopping.entity.ProductType;
import com.qf.shopping.service.IProductTypeService;
import com.qf.shopping.service.impl.ProductTypeServiceImpl;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**处理与商品类型相关的请求
 * @author 三旬
 * @version 1.0  2022/9/15
 */
@WebServlet("/ProductTypeController/*")
public class ProductTypeController extends DisatpcherServlet {
    //1.创建调用业务层的方法
    IProductTypeService productTypeService =new ProductTypeServiceImpl();
    //2.实现访问的方法
    /**
     * 分页显示数据
     * @return
     */
    public String selectPage(HttpServletRequest request, HttpServletResponse response){
        //获取前端传递的值
        String index = request.getParameter("index");
        String size = request.getParameter("size");
        //实例化分页对象(默认第1页，显示8条记录)
        Page<ProductType> page = new Page<>();
        if(index != null && !"".equals(index)){
            page.setIndex(Integer.valueOf(index));
        }
        if(size != null && !"".equals(size)){
            page.setSize(Integer.valueOf(size));
        }
        //3.调用业务层把所有的数据封装到page对象中
        page.setUrl("ProductTypeController/selectPage");
        productTypeService.selectPage(page);
        //4把page对象添加到作用域中
        request.setAttribute("page",page);
        //5.转发到用户列表展示数据
        return Constants.FORWARD+":back/goodstype/goodstype.jsp";
    }

    /**
     * 删除选中的商品类型信息
     * @param request
     * @param response
     */
    public void delChecked(HttpServletRequest request,HttpServletResponse response) throws IOException {
        //获取前端传来要删除的id
        String json = request.getReader().readLine();
        //将前端传来的json类型的字符串转化为Integer类型的集合
        List<Integer> list = JSON.parseArray(json,Integer.class);
        //调用业务层处理
        boolean result = productTypeService.delChecked(list);
        //创建一个map集合存放响应信息
        Map<String,Object> map = new HashMap<>();
        //设置默认响应信息(删除失败)
        map.put("code",100);
        if(result){
            //响应成功信息
            map.put("code",200);
        }
        System.out.println(map);
        //给前端响应信息
        response.getWriter().println(JSON.toJSONString(map));
    }

    /**
     * 异步的调用商品类型中的父类型
     * @param request
     * @param response
     */
    public String getProdctTypeListByPid(HttpServletRequest request,HttpServletResponse response) throws IOException {
        //接收前端传来的数据
        Integer pid = Integer.valueOf(request.getParameter("pid"));
        //调用业务处理
        List<ProductType> list = productTypeService.getProdctTypeListByPid(pid);
        //将得到的数据转成json格式,响应
        System.out.println(list);
        String json = JSON.toJSONString(list);
        return Constants.JSON+":"+json;
    }

    /**
     * 异步添加商品类型
     * @param request
     * @param response
     * @return
     * @throws IOException
     */
    public String addProductType(HttpServletRequest request,HttpServletResponse response) throws IOException {
        //接收前端传来要添加的商品类型数据(json提交的数据)
        String json = request.getReader().readLine();
        //将json类型（"name":"admin","pid":"1"）---->转为ProductType类型的对象
        ProductType productType = JSON.parseObject(json,ProductType.class);
        System.out.println("输出一下接收的数据:"+productType);
        //调用业务层,添加对象
        boolean result = productTypeService.add(productType);
        System.out.println(result);
        //创建map集合，存放响应数据
        Map<String,Integer> map = new HashMap<>();
        //设置默认响应失败
        map.put("code",100);
        //根据结果响应
        if(result){
            map.put("code",200);
        }
        return Constants.JSON+":"+JSON.toJSONString(map);
    }

    /**
     * 修改商品类型，需要回填信息，先获得要修改的商品类型
     * @param request
     * @param response
     * @return
     */
    public String getProductTypeById(HttpServletRequest request, HttpServletResponse response){
        //获取要修改的商品类型id
        Integer id = Integer.valueOf(request.getParameter("id"));
        //调用业务处理获得商品类型对象
        ProductType productType = productTypeService.selectOneById(id);
        //将得到的数据放入request作用域中
        request.setAttribute("productType", productType);
        //将数据转发到修改页面
        return Constants.FORWARD+":back/goodstype/goodstypeupdate.jsp";
    }

    /**
     * 修改商品类型信息
     * @param request
     * @param response
     * @return
     * @throws IOException
     */
    public String updateProductType(HttpServletRequest request,HttpServletResponse response) throws IOException {
        //接收前端的数据
        String json = request.getReader().readLine();
        //将json数据转成ProductType对象
        ProductType productType = JSON.parseObject(json,ProductType.class);
        //调用业务层处理
        Boolean result = productTypeService.updateById(productType);
        //创建一个map存放响应的信息
        Map<String ,Integer> map = new HashMap<>();
        //设置默认响应信息为失败
        map.put("code",100);
        if (result) {
            //修改成功则将默认响应信息覆盖
            map.put("code",200);
        }
        //把响应信息转成JSON字符串响应
        return Constants.JSON+":"+JSON.toJSONString(map);
    }

    /**
     * 通过商品类型id删除
     * @param request
     * @param response
     * @return
     */
    public String deleteProductTypeById(HttpServletRequest request,HttpServletResponse response){
        //获得删除商品类型的id
        String id = request.getParameter("id");
        //调用业务处理
        Boolean result = productTypeService.deleteById(Integer.valueOf(id));
        //根据结果响应
        if(result){
            return Constants.REDIRECT+":"+"ProductTypeController/selectPage";
        }
        return Constants.SCRIPT+":"+"修改失败！";
    }

    /**
     * 二级联动,传商品类型的父类型id，初始化当前父类的子类型
     * @param request
     * @param response
     * @return
     */
    public String getParentChildren(HttpServletRequest request,HttpServletResponse response){
        //接收要查询的父类型的子类
        Integer id = Integer.valueOf(request.getParameter("id"));
        if(id != null && !"".equals(id)){
            //调用业务层
            List<ProductType> list = productTypeService.getParentChildren(id);
            System.out.println(list);
            //将结果转成JSON字符串
            String json = JSON.toJSONString(list);
            return Constants.JSON+":"+json;
        }
        return Constants.SCRIPT+":"+"请选择大类";
    }
    public String nulrer(HttpServletRequest request,HttpServletResponse response){
        //
        return null;
    }
}
